Skip to content

Adding feature tracking operator#2148

Merged
Adam Gainford (A-Gainford) merged 23 commits into
mainfrom
simple-track
Jul 6, 2026
Merged

Adding feature tracking operator#2148
Adam Gainford (A-Gainford) merged 23 commits into
mainfrom
simple-track

Conversation

@A-Gainford

@A-Gainford Adam Gainford (A-Gainford) commented May 19, 2026

Copy link
Copy Markdown
Contributor

Adding feature-tracking via the Simple-Track repo (https://github.com/ParaChute-UK/simple-track), which is included as a new dependency. The feature.track operator is used to call Simple-Track, which returns three cubes per timestep: "feature_id", "feature_lifetime" and "feature_init". These can be filtered to select them for plotting with existing routines. Other data which is not currently used by CSET can be saved for further analysis. The new "feature" operator set will also be used to implement cell stats using Simple-Track with the tracking capabilities disabled (though the "feature" name may want to be changed).

Contribution checklist

Aim to have all relevant checks ticked off before merging. See the developer's guide for more detail.

  • Documentation has been updated to reflect change.
  • New code has tests, and affected old tests have been updated.
  • All tests and CI checks pass.
  • Ensured the pull request title is descriptive.
  • Ensure rose-suite.conf.example has been updated if new diagnostic added.
  • Conda lock files have been updated if dependencies have changed.
  • Attributed any Generative AI, such as GitHub Copilot, used in this PR.
  • Marked the PR as ready to review.

@jfrost-mo James Frost (jfrost-mo) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for this pull request, and sorry it took so long for me to get to it. I'm assuming that despite it being a draft PR it is ready for a review.

Overall it looks like a good set of changes that will nicely integrate simple-track into CSET. There are a few small issues highlighted in the comments below, but it is overall looking very good.

Please run the pre-commit checks over this code (pre-commit run --all-files) to fix a number of minor issues. These checks can be set to run on each commit by running pre-commit install.

Comment thread requirements/environment.yml
Comment thread src/CSET/operators/__init__.py Outdated
Comment thread src/CSET/operators/feature.py Outdated
Comment thread .gitignore Outdated
Comment thread src/CSET/operators/feature.py
Comment thread src/CSET/operators/feature.py
Comment thread tests/operators/test_feature.py Outdated
Comment thread tests/operators/test_feature.py Outdated
Comment thread src/CSET/recipes/example_recipes/example_feature_track.yaml Outdated
Comment thread src/CSET/recipes/example_recipes/example_feature_track.yaml
@jfrost-mo James Frost (jfrost-mo) marked this pull request as ready for review June 25, 2026 11:41

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the taking a look through the code, happy with the suggestions. I assume it's okay to accept changes on the lockfiles at the bottom of the PR page but I have held off for now

@Fraetor James Frost (Fraetor) left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still need to review the feature file.

Comment thread src/CSET/operators/_colorbar_definition.json Outdated
Comment thread src/CSET/operators/plot.py Outdated
Comment thread .gitignore Outdated

@jfrost-mo James Frost (jfrost-mo) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good. There are a couple very minor cleanup suggestions, but once the checks are passing this should be good to merge.

Comment thread tests/operators/test_feature.py Outdated
Comment thread tests/operators/test_feature.py Outdated
Comment thread src/CSET/recipes/example_recipes/example_feature_track.yaml
@jfrost-mo

Copy link
Copy Markdown
Member

Branch will need rebasing to fix conflicts. Easiest thing to do is probably just to take the main branch versions of the lock files then re-resolve them all.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor
Total coverage: 91% (HTML report)
Name                                                              Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------------------------------------------
src/CSET/__init__.py                                                 93      2     12      0    98%
src/CSET/_common.py                                                 149      0     52      0   100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py             115     27     24      0    79%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py      70      0      4      0   100%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py            29      0      8      0   100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py              25      0      4      0   100%
src/CSET/cset_workflow/lib/python/jinja_utils.py                     17      0      6      0   100%
src/CSET/extract_workflow.py                                         47      0     16      0   100%
src/CSET/graph.py                                                    43      0     14      0   100%
src/CSET/operators/__init__.py                                       89      0     26      0   100%
src/CSET/operators/_atmospheric_constants.py                          9      0      0      0   100%
src/CSET/operators/_colormaps.py                                    229      4     62      4    97%
src/CSET/operators/_stash_to_lfric.py                                 3      0      0      0   100%
src/CSET/operators/_utils.py                                        183      8     74      6    95%
src/CSET/operators/ageofair.py                                      141      7     64      5    94%
src/CSET/operators/aggregate.py                                      76      1     22      1    98%
src/CSET/operators/aviation.py                                       60      0     18      0   100%
src/CSET/operators/collapse.py                                      154     12     72      5    91%
src/CSET/operators/constraints.py                                   107      7     46      2    93%
src/CSET/operators/convection.py                                     37      4     10      2    87%
src/CSET/operators/ensembles.py                                      27      0     14      0   100%
src/CSET/operators/feature.py                                        41      0     10      0   100%
src/CSET/operators/filters.py                                        66      2     30      0    98%
src/CSET/operators/humidity.py                                      139      0     56      0   100%
src/CSET/operators/imageprocessing.py                                56      0     16      0   100%
src/CSET/operators/mesoscale.py                                      17      0      2      0   100%
src/CSET/operators/misc.py                                          146      0     54      1    99%
src/CSET/operators/plot.py                                          929    169    318     59    78%
src/CSET/operators/power_spectrum.py                                 97      3     30      3    95%
src/CSET/operators/precipitation.py                                  93      0     50      0   100%
src/CSET/operators/pressure.py                                       41      0     12      0   100%
src/CSET/operators/read.py                                          409     38    178     14    89%
src/CSET/operators/regrid.py                                        122     18     64      1    83%
src/CSET/operators/scoreswrappers.py                                 47      6     12      3    85%
src/CSET/operators/temperature.py                                   121      0     32      0   100%
src/CSET/operators/transect.py                                       62      0     24      0   100%
src/CSET/operators/wind.py                                           45      3     10      2    91%
src/CSET/operators/write.py                                          15      0      6      0   100%
src/CSET/recipes/__init__.py                                        101      0     28      0   100%
---------------------------------------------------------------------------------------------------
TOTAL                                                              4250    311   1480    108    91%

@jfrost-mo

Copy link
Copy Markdown
Member

Just needs a little more tests:

@A-Gainford

Copy link
Copy Markdown
Contributor Author

Just needs a little more tests:

* A test to check an error is raised when a lat/lon cube is given to `_check_xy_coords`:
  https://tmpweb.net/HB6wj292JII9/z_f5ac9763053bfad5_feature_py#t217

* Some tests for the new custom colourmap:
  https://tmpweb.net/HB6wj292JII9/z_f5ac9763053bfad5__colormaps_py#t619

Thanks for the suggestions! Forgot about the custom colourmap

@A-Gainford Adam Gainford (A-Gainford) merged commit cf0f4a8 into main Jul 6, 2026
9 checks passed
@A-Gainford Adam Gainford (A-Gainford) deleted the simple-track branch July 6, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants